/**
 * 
 */
package com.cssy.yd.logic.util.logic;

import com.cssy.yd.logic.entity.LogicSoItemDO;
import com.cssy.yd.logic.entity.LogicSoWareItemDO;
import com.cssy.yd.logic.entity.LogicSoWarefreezeItemDO;
import com.cssy.yd.logic.entity.LogicSoWarefreezedealItemDO;

/**
 * 订单模块相关bean 工具类
 * @author huang.xuming [2013-9-12]
 *
 */
public class LogicSoBeanUtil {
	
	
	
	private LogicSoBeanUtil(){
		
	}
	
	/**
	 * 考虑多线程，内部静态函数静态变量，第一次使用时加载
	 * @author huang.xuming
	 *
	 */
	private static class SingletonHolder{
		 static LogicSoBeanUtil instance = new LogicSoBeanUtil(); 
	}
	
	/**
	 * 单例入口
	 * @return
	 */
	public static LogicSoBeanUtil getInstance(){
		
		return SingletonHolder.instance;
	}
	
	/**
	 * 实时计算销售订单item剩余可冻结数量，可普通出库
	 * <p>订单当前item.订单数量- 订单当前item.累计出库数量 - 订单当前item.总冻结数量</p>
	 * @param soItem
	 * @return
	 */
	public double calcSoItemCanFreezeBQty(LogicSoItemDO soItem){
		return soItem.getProdBQuantity() - soItem.getCkBQuantity() - soItem.getFrozenBQuantity();
	}
	
	/**
	 * 实时计算冻结申请单item剩余可冻结数量的方法
	 * <p>冻结申请单当前item.申请冻结数量 - 冻结申请单当前item.累计冻结数量</p>
	 * @param soWarefreezeItemDO
	 * @return
	 */
	public double calcFreezeItemCanFreezeBQty(LogicSoWarefreezeItemDO soWarefreezeItemDO){
		return soWarefreezeItemDO.getSqdjBQuantity() - soWarefreezeItemDO.getSjdjBQuantity() ;
	}
	
	/**
	 * 实时计算冻结申请单item剩余可解冻/可出库数量的方法
	 * @param soWarefreezeItemDO
	 * @return
	 */
	public double calcFreezeItemCanUnfreezeBQty(LogicSoWarefreezeItemDO soWarefreezeItemDO){
		return soWarefreezeItemDO.getSjdjBQuantity() - soWarefreezeItemDO.getSjdjCkBQty() - soWarefreezeItemDO.getSjdjJdBQty();
	}
	
	/**
	 * 实时计算冻结处理单item剩余可解冻/可出库数量的方法
	 * @param soWarefreezeItemDO
	 * @return
	 */
	public double calcFreezeDealItemCanUnfreezeBQty(LogicSoWarefreezedealItemDO soWarefreezeItemDO){
		return soWarefreezeItemDO.getDjBQuantity() - soWarefreezeItemDO.getDjckBQuantity() - soWarefreezeItemDO.getDjjdBQuantity();
	}
		
	
	public boolean isSameMaterial(LogicSoItemDO soItem , LogicSoWareItemDO soWareItemDO){
		boolean flag = false;
		if(soItem.getProdNo().equals(soWareItemDO.getProdNo())
				&& soItem.getStatus().equals(soWareItemDO.getStatus())){
			flag = true;
		}
		
		return flag;
	}
	
	public boolean isSameMaterial(LogicSoItemDO soItem , LogicSoWarefreezedealItemDO soWareItemDO){
		boolean flag = false;
		if(soItem.getProdNo().equals(soWareItemDO.getProdNo())
				&& soItem.getStatus().equals(soWareItemDO.getStatus())){
			flag = true;
		}
		
		return flag;
	}
	/**
	 * 相同物料 - LogicSoItemDO & LogicSoWarefreezeItemDO
	 * @param soItem
	 * @param soWarefreezeItemDO
	 * @return
	 */
	public boolean isSameMaterial(LogicSoItemDO soItem , LogicSoWarefreezeItemDO soWarefreezeItemDO){
		boolean flag = false;
		if(soItem.getProdNo().equals(soWarefreezeItemDO.getProdNo())
				&& soItem.getStatus().equals(soWarefreezeItemDO.getStatus())){
			flag = true;
		}
		
		return flag;
	}
	
	/**
	 * 相同物料 - LogicSoWarefreezeItemDO & LogicSoWarefreezedealItemDO
	 * @param soWarefreezeItemDO
	 * @param soWarefreezedealItemDO
	 * @return
	 */
	public boolean isSameMaterial(LogicSoWarefreezeItemDO soWarefreezeItemDO, LogicSoWarefreezedealItemDO soWarefreezedealItemDO){
		boolean flag = false;
		if(soWarefreezedealItemDO.getProdNo().equals(soWarefreezeItemDO.getProdNo())
				&& soWarefreezedealItemDO.getStatus().equals(soWarefreezeItemDO.getStatus())){
			flag = true;
		}
		
		return flag;
	}
	
	
}
